package entity

import (
	"fmt"
	"reflect"
)

type PersonTag struct {
	Name   string `json:"name is : "` // ``字符tag相当于是 函数的get方法
	Age    int    `json:"Age is :"`
	Gender string `json:"Gender is :" default:"unknown"` // default表示默认值
}

// 自定义Print函数
func Print(obj interface{}) error {
	// 通过反射取出tag标签的数据

	// 取出Value值
	v := reflect.ValueOf(obj)
	// 通过名字直接查找
	tagName := v.FieldByName("Name")
	fmt.Println("通过tag的名称直接查找字段对象的label是：" + tagName.String())

	for i := 0; i < v.NumField(); i++ {

		// 取出tag
		filed := v.Type().Field(i)
		tag := filed.Tag

		label := tag.Get("json")
		defaultV := tag.Get("default")

		value := fmt.Sprintf("%v", v.Field(i))
		if "" == value {
			value = defaultV
		}
		fmt.Println(label + value)
	}

	return nil
}

// 这是entity包下的第二个init方法
func init() {
	fmt.Println("这是entity包下的第二个init()方法函数")
	pp := PersonTag{Name: "狗子", Age: 28}
	Print(pp)
}
